#include <stdio.h>
typedef unsigned long long ull;

// 快速幂取模函数：计算 (a^b) % m
ull quick_pow_mod(ull a, ull b, ull m) {
    ull res = 1;  // 结果初始化为1，因为任何数的0次方是1
    a %= m;       // 先对a取模，缩小范围（(a mod m)^b mod m = a^b mod m）
    while (b > 0) {
        if (b & 1) {  // 等价于b % 2 == 1，判断二进制最低位是否为1
            res = (res * a) % m;  // 累加当前位的贡献
        }
        a = (a * a) % m;  // a平方，对应下一个二进制位的权重（2^k → 2^(k+1)）
        b >>= 1;         // b右移一位，处理下一个二进制位
    }
    return res;
}

int main() {
    ull a, b, m;
    scanf("%llu %llu %llu", &a, &b, &m);
    printf("%llu\n", quick_pow_mod(a, b, m));
    return 0;
}